☁️ cloud | October 19, 2021
boshVM를 배포하고, 그 위에 PaaS-TA 배포 및 CF-CLI(Cloud-Foundry)를 통해 제어해 봅시다.
BOSH Deployment manifest는 components 요소 및 배포의 속성을 정의한 YAML 파일
실습 때, bosh-lite를 이용할 예정
일반적인 Bosh 아키텍처 이용 시, 각각의 Bosh 컴포넌트를 VM으로 만들어 운영함(uaa, diego, blob store, credhub)
VMware를 통한 Inception(VM)의 설치 과정은 생략
Paas-TA 5.5 설치 링크
$ sudo apt install curl
$ mkdir workspace
# (workspace 아래에 PaaS-TA 설치 파일 다운로드 후 압축 해제)
$ cd workspace
$ curl -Lo paasta-5.5.zip https://nextcloud.paasta.org/index.php/s/ARmoNN83XGgt2gg/download
$ unzip paasta-5.5.zip
$ curl -Lo ./bosh https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-6.1.0-linux-amd64
$ chmod +x ./bosh
$ sudo mv ./bosh /usr/local/bin/bosh
$ bosh -v
$ sudo apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt1-dev libxml2-dev libssl-dev libreadline7 libreadline-dev libyaml-dev libsqlite3-dev sqlite3
$ sudo apt update
$ sudo apt upgrade
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
$ sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian bionic contrib"
$ sudo apt update
$ sudo apt install virtualbox-6.0
$ VBoxManage --version
# 6.0.14r133895
실습에 사용할 Bosh-lite 쉘 스크립트의 정보
$ cat deploy-bosh-lite.sh
#!/bin/bash
bosh create-env bosh.yml \
--state=warden/state.json \
--vars-store warden/creds.yml \ # bosh 인증정보를 가지고 있으며, 해당 파일을 이용해 bosh에 로그인
-o virtualbox/cpi.yml \
-o virtualbox/outbound-network.yml \
-o bosh-lite.yml \
-o bosh-lite-runc.yml \
-o uaa.yml \
-o credhub.yml \ # Credhub은 인증정보 저장소, Bosh 설치 시 credhub.yml을 적용하면 PaaS-TA 설치 시 인증정보를 credhub에 저장하게 됨
-o jumpbox-user.yml \ # bosh VM에 접근하기 위한 인증을 적용하는 파일
-v inception_os_user_name='ubuntu' \
-v director_name='micro-bosh' \
-v internal_cidr='10.0.1.0/24' \
-v internal_gw='10.0.1.1' \
-v internal_ip='10.0.1.6' \
-v network_name='vboxnet0' \
-v outbound_network_name='NatNetwork'
BOSH-VM 배포
{iaas}
은 해당하는 IaaS의 이름(bosh-lite, Openstack, AWS, GCP etc..)$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ chmod 755 *.sh
$ ./deploy-{iaas}.sh
$ bosh alias-env micro-bosh -e 10.0.1.6 --ca-cert <(bosh int warden/creds.yml --path /director_ssl/ca)
BoshVM login 방법은 총 2가지가 있음
$ vi login.sh
#!/usr/bin
export BOSH_CA_CERT=$(bosh int ./warden/creds.yml --path /director_ssl/ca)
export BOSH_CLIENT=admin
export BOSH_CLIENT_SECRET=$(bosh int ./warden/creds.yml --path /admin_password)
$ source login.sh
$ bosh -e micro-bosh env
jumpbox key 생성 (Bosh VM 로그인 용)
$ bosh int warden/creds.yml --path /jumpbox_ssh/private_key > jumpbox.key
$ chmod 600 jumpbox.key
$ ssh jumpbox@10.0.1.6 -i jumpbox.key # boshVM 로그인
bosh/0:~$ sudo su
$ monit summary
# 정지 명령어
$ monit stop credhub
# 시작 명령어
$ monit start credhub
# boshVM에서 나가기
$ exit # root 계정 logout
$ exit # jumpbox 계정 logout
credhub cli 설치
$ cd ~
$ wget https://github.com/cloudfoundry-incubator/credhub-cli/releases/download/2.0.0/credhub-linux-2.0.0.tgz
$ tar -xvf credhub-linux-2.0.0.tgz
$ chmod +x credhub
$ sudo mv credhub /usr/local/bin/credhub
$ credhub --version
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ vi credhub_login.sh
...
#!/usr/bin
export CREDHUB_CLIENT=credhub-admin
export CREDHUB_SECRET=$(bosh int --path /credhub_admin_client_secret warden/creds.yml)
export CREDHUB_CA_CERT=$(bosh int --path /credhub_tls/ca warden/creds.yml)
...
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ source credhub_login.sh
$ credhub login -s https://10.0.1.6:8844 --skip-tls-validation
credhub credentials 확인
$ credhub find
# /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment 해당 디렉토리에서 정지 작업을 해야함
$ cd /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment
$ vboxmanage controlvm $(bosh int warden/state.json --path /current_vm_cid) savestate
이후 Inception 서버 종료
# Virtual Box vm 복구
$ cd /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment
$ vboxmanage startvm $(bosh int warden/state.json --path /current_vm_cid) --type headless
azs
는 가용 zone에 대한 설정으로 paasta가 설치될 zone에 대한 정의vm_type
은 paasta vm이 설치될 spec을 정의하며, instance_type
은 openstack flavor에 설정 되어 있어야 함compilation
은 PaaS-TA 설치 시 Compile VM이 생성될 zone 및 vm type을 설정disk_types
는 PaaS-TA 설치 시 사용될 VM의 디스크에 대한 정의network
은 paasta vm이 생성될 network관련 정의vm_extentions
는 관련 보안 그룹 및 로드 밸런서와 같은 임의의 IaaS 특정 구성을 지정할 수 있는 클라우드 구성의 가상 컴퓨터 구성설정된 cloud-config.yml 파일을 배포하는 명렁어
# Cloud-config설정 정보를 BOSH에 update
$ cd ~/workspace/paasta-5.5/deployment/cloud-config
$ bosh –e {director_name} update-cloud-config {iaas}_cloud_config.yml
# bosh에 upload된 cloud-config 확인
$ bosh –e {director_name} cloud-config
$ bosh –e {director_name} cloud-config
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ chmod 755 ./update-runtime-config.sh
$ cat ./update-runtime-config.sh
[update-runtime-config.sh]
...
bosh -e ${director_name} update-runtime-config -n runtime-configs/dns.yml \
-v inception_os_user_name=${inception_os_user_name} \
-v cert_days=3650
...
$ ./update-runtime-config.sh
$ bosh –e {director_name} runtime-config
$ cd ~/workspace/paasta-5.5/stemcell/paasta
$ bosh –e {director_name} upload-stemcell bosh-stemcell-315.64-{iaas}-
ubuntu-xenial-go-agent.tgz
$ bosh –e {director_name} stemcells
$ ./deploy-bosh-lite.sh
$ bosh -e {director_name} –d {deploy_name} vms
BoshVM에 파스타를 설치할 정보를 Cloud-config, runtime-config, stemcell 를 확인 및 구축하기
$ cd /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment
$ vboxmanage startvm $(bosh int warden/state.json --path /current_vm_cid) --type headless
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ source login.sh
$ bosh -e micro-bosh env
$ bosh -e micro-bosh update-cloud-config bosh-lite-cloud-config.yml
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ bosh -e micro-bosh cloud-config
update-runtime-config.sh 스크립트 확인
-n runtime-configs/dns.yml
: 런타임 정보가 들어있는 스크립트-v cert_days=3650
: 인증 기간을 나타냄#!/bin/bash
# 디렉토리 네임
director_name='micro-bosh'
# os_user_name
inception_os_user_name='ubuntu'
bosh -e ${director_name} update-runtime-config -n runtime-configs/dns.yml \
-v inception_os_user_name=${inception_os_user_name} \
-v cert_days=3650
$ ./update-runtime-config.sh
$ bosh -e micro-bosh runtime-config
bosh config 전체 확인
$ bosh -e micro-bosh configs
$ cd ~/workspace/paasta-5.5/stemcell/paasta
$ bosh -e micro-bosh upload-stemcell bosh-stemcell-315.64-warden-boshlite-ubuntu-xenial-go_agent.tgz
$ bosh -e micro-bosh stemcells
cd ~/workspace/paasta-5.5/deployment/paasta-deployment
$ ./deploy-bosh-lite.sh
$ sudo ip route add 10.244.0.0/16 via 10.0.1.6
PaaS-TA VM에서 생성된 instances를 출력하는 명령어(배포되지 않은 것도 포함해서 나옴)
$ bosh -e micro-bosh instances
$ bosh -e micro-bosh env --details
$ bosh -e micro-bosh stemcells
$ bosh -e micro-bosh releases
$ bosh -e micro-bosh tasks --recent
$ bosh -e micro-bosh locks
$ bosh -e micro-bosh cancel-task 123
배포된 VM 정보 && 디스크, CPU, 메모리에 대한 정보를 종합 확인
--vitals
옵션 : 디테일하게 확인$ bosh -e micro-bosh -d paasta vms --vitals
PaaS-TA에 배포된 VM들을 확인(instances 명령어와는 다르게 VM에 배포된 instances 들만 출력)
$ bosh -e micro-bosh -d paasta vms
API VM에 접속
$ bosh -e micro-bosh -d paasta ssh api
만약 접속한 VM에서 에러가 발생할 시 로그 확인 경로
$ cd var/vcap/sys/log
$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
$ echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
$ sudo apt update
$ sudo apt install cf-cli
$ cf -v
cf login
--skip-ssl-validation
옵션 : PaaS-TA에 로그인 시, SSL 인증 절차를 거치지 않았기 때문에 해당 사이트를 신뢰하고 검증하지 않아도 된다는 명령어-v system_domain=10.244.0.34.nip.io
옵션에 해당되며, 해당 URL를 api로 사용하기 때문에 api 도메인을 입력 후 서브 도메인을(10.244.0.34.nip.io) 입력해주는 것임$ cf login --skip-ssl-validation
(명령 수행 후 API Endpoit : 이 뜨면 아래 https://api.10.244.0.34.nip.io 를 입력한다)
$ https://api.10.244.0.34.nip.io # SSL 인증서를 인증하지 않았기 때문에 해당 PaaS-TA ip를 허용한다고 알려줘야함
# passta deployment에서 로그인 정보 변경 가능
$ admin/admin # 관리자로 로그인 - 이메일/패스워드 입력
로그인 후 화면 모습
자세한 cf 명령어에 대한 정보는
cf --help
orcf --help -a
명령어로 확인 가능
# $ cf create-user --help 처럼 --help 명령어 사용가능
$ cf create-user edu-user user
$ cf create-org edu-org
$ cf orgs
space 생성
-o
옵션 : organization 을 뜻하며, -o 옵션을 붙이지 않을 시, 기본적으로 현재 설정된 org에 space 공간을 만듬cf target
명령어임$ cf create-space -o edu-org edu-space
$ cf spaces
org role 설정
cf set-org-role --help
명령어로 확인 가능$ cf set-org-role edu-user edu-org OrgManager
space role 설정
cf set-space-role --help
명령어로 확인 가능$ cf set-space-role edu-user edu-org edu-space SpaceDeveloper
$ cf target -o edu-org -s edu-space (아니면 cf target -o edu-org)
$ sudo apt update
$ sudo apt install openjdk-8-jdk
$ java -version
$ sudo apt install git
$ git --version
spring-music 다운로드 및 빌드
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry-samples/spring-music
$ cd spring-music/
$ ./gradlew clean assemble
$ cat manifest.yml
---
applications:
- name: spring-music
memory: 1G
random-route: true # URL을 자동적으로 만들어줌
path: build/libs/spring-music-1.0.jar
env:
JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'
SPRING_PROFILES_ACTIVE: http2
# JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 11.+ } }'
cf push 명령어로 애플리케이션 배포 및 애플리케이션 확인(아래는 push의 과정을 설명)
random-route: true
로 인해 URL이 자동적으로 생성되고, apps 명령어를 통해 확인이 가능$ cf push
$ cf apps
$ cf app spring-music
$ cf logs spring-music
$ cf logs spring-music --recent
$ cf ssh welcome-cf -L 9999:10.10.4.14:3306